package com.open.capacity.user.service;

import com.open.capacity.commons.PageResult;
import com.open.capacity.commons.Result;
import com.open.capacity.easypoi.user.SysUserExcel;
import com.open.capacity.model.system.LoginAppUser;
import com.open.capacity.model.system.SysUser;
import com.open.capacity.user.excel.UserExcel;
import com.open.capacity.user.model.SysUserHistory;
import com.open.capacity.user.model.SysUserHistoryDto;
import com.open.capacity.user.vo.SysCompanyVo;
import com.open.capacity.user.vo.SysUserVo;
import com.open.capacity.vo.SysUserRelationExtVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * @author 作者 ftquan E-mail: 464725602@qq.com
 * @version 创建时间：2017年11月12日 上午22:57:51
 */
public interface SysUserService {

    /**
     * 修改用户
     *
     * @param sysUser
     */
    SysUser updateSysUser(SysUser sysUser);

    /**
     * 获取UserDetails对象
     *
     * @param username
     * @return
     */
    LoginAppUser findByUsername(String username);

    /**
     * 获取UserDetails对象
     *
     * @param id
     * @return
     */
    SysUser findById(String id);

    /**
     * 获取UserDetails对象
     *
     * @param id
     * @return
     */
    String findSignature(String id);

    /**
     * 找到最近晋升记录
     * @param userid
     * @return
     */
    SysUserHistory findLastHistory(String userid);

    /**
     * 获取姓名集合
     *
     * @param ids
     * @return
     */
    String findNameByIds(String ids);


    /**
     * 获取UserDetails对象
     *
     * @param name
     * @return
     */
    SysUser findByName(String companyId, String departmentId, String name);

    /**
     * 获取UserDetails对象
     *
     * @param name
     * @return
     */
    SysUser findByGzName(String companyId, String category, String name);

    /**
     * 获取UserDetails对象
     *
     * @return
     */
    SysUser findByCode(String companyId, String idnumber);

    /**
     * 查找用户关联配置
     *
     * @param objectId
     * @return
     */
    SysUserRelationExtVo findUserRelationsByObjectId(String objectId);

    /**
     * 更新密码
     *
     * @param id
     * @param oldPassword
     * @param newPassword
     * @return
     */
    Result updatePassword(String id, String oldPassword, String newPassword);

    /**
     * 更新签名图片
     *
     * @param id
     * @param signature
     * @return
     */
    Result updateSignature(String id, String signature);


    /**
     * 更新状态
     *
     * @param id
     * @param status
     * @return
     */
    Result updateStatus(String id, Integer status);

    /**
     * 更新状态
     *
     * @param id
     * @param url
     * @return
     */
    Result updateHeadUrl(String id, String url);

    /**
     * 删除用户
     *
     * @param id
     * @return
     */
    int delete(String id);

    /**
     * 删除用户
     *
     * @param id
     * @return
     */
    int deleteHistory(String id);

    /**
     * 用户列表
     *
     * @param params
     * @return
     */
    PageResult<SysUser> pageUsers(Map<String, Object> params);

    /**
     * 用户列表
     *
     * @param params
     * @return
     */
    List<SysUser> findUsers(Map<String, Object> params);

    /**
     * 用户晋升记录
     *
     * @param userid
     * @return
     */
    List<SysUserHistory> findUserHistory(String userid);

    /**
     * 用户晋升记录
     *
     * @param userids
     * @return
     */
    List<SysUserHistoryDto> findUserHistorys(String userids);


    /**
     * 设置银行账号
     *
     * @param sysUsers
     * @return
     */
    Result saveBankAccount(List<SysUser> sysUsers);

    /**
     * 更新
     *
     * @param sysUser
     * @param keyValue
     * @return
     */
    Result saveOrUpdate(SysUser sysUser, String keyValue);

    /**
     * 更新
     *
     * @param history
     * @return
     */
    Result saveHistory(SysUserHistory history);

    /**
     * 更新
     *
     * @param historys
     * @return
     */
    Result saveHistorys(List<SysUserHistoryDto> historys);

    /**
     * 查询全部用户
     *
     * @param params
     * @return
     */
    List<UserExcel> findAllUsers(Map<String, Object> params);

    /**
     * 用户map
     *
     * @return
     */
    Map<String, SysUserVo> getMap();

    /**
     * 从excel导入数据
     *
     * @param multipartFile
     * @return
     */
    int importExcel(MultipartFile multipartFile) throws Exception;

    /**
     * 从excel导入数据
     *
     * @param multipartFile
     * @return
     */
    int importBankAccount(MultipartFile multipartFile) throws Exception;

}
